package client.domein.dammen;

import java.util.*;
import java.awt.Color;
import java.awt.Point;

/**
 * Stelt een speler voor in het dammenspel
 * @author Vanpoucke Sven
 *
 */
public class Speler
{
	private List<Pion> pionnen;
	private Color kleur;
	private Point startPositie;
	private int aantalStartPionnen;
	private Point veldGrootte;
	
	/**
	 * Constructor
	 * @param kleur Kleur van de speler
	 * @param startPositie Plaats van de eerste pion op het veld
	 * @param veldGrootte Grootte van het veld
	 * @param aantalStartPionnen Aantal pionnen die initieel op het bord staan
	 */
	public Speler(Color kleur, Point startPositie, Point veldGrootte, int aantalStartPionnen)
	{
		this.kleur = kleur;
		this.startPositie = startPositie;
		this.aantalStartPionnen = aantalStartPionnen;
		this.veldGrootte = veldGrootte;
		pionnen = new ArrayList<Pion>();
		createPionnen();
	}
	
	/**
	 * Aanmaken van de pionnen en ze toewijzen aan de juiste plaats op het bord
	 */
	public void createPionnen()
	{
		pionnen.clear();
		
		int operator = (startPositie.x == 0) ? 1 : -1;
		
		for(int i=0; i< (aantalStartPionnen / (veldGrootte.x/2) ); i++)
		{
			for(int j=0; j < veldGrootte.x / 2; j++)
			{
				Point punt = new Point(startPositie.x, startPositie.y); 
				punt.x += (operator * ( 2 * j + (i%2)));
				punt.y += (operator * i);
				pionnen.add(new Pion(punt));
			}
		}
	}
	
	/**
	 * Een move toepassen op deze speler (zal alle pionnen doorlopen en kijken of de move van toepassing is en deze uitvoeren)
	 * @param m Move die wordt toegepast op deze speler
	 * @return Pion op welke de move werd toegepast
	 */
	public Pion doMove(Move m)
	{
		for(Pion p : pionnen)
		{
			if(p.getLocatie().equals(m.getStartPoint()))
			{
				p.getLocatie().x = m.getEndPoint().x;
				p.getLocatie().y = m.getEndPoint().y;
				return p;
			}
		}
		
		return null;
	}
	
	/**
	 * Verwijdert een pion van een bepaalde plaats
	 * @param plaats Plaats waarop een pion moet worden verwijderd
	 */
	public void remove(Point plaats)
	{
		for(Pion p: pionnen)
			if(p.getLocatie().equals(plaats))
			{
				pionnen.remove(p);
				return;
			}
	}

	// Getters en setters
	
	public List<Pion> getPionnen()
	{
		return pionnen;
	}

	public Color getKleur()
	{
		return kleur;
	}
	
	public Point getStartPositie()
	{
		return startPositie;
	}
	
}
